#include "network.h"


QByteArray mapToByteArrayCustom(const QMap<QString, QString>& map)
{
    QStringList pairs;
    for (auto it = map.constBegin(); it != map.constEnd(); ++it) {
        pairs.append(it.key() + "=" + it.value());
    }
    QString result = pairs.join("&");  // 使用 '&' 连接键值对
    return result.toUtf8();  // 转换为 QByteArray
}

QMap<QString, QString> byteArrayToMapCustom(const QByteArray& byteArray)
{
    QMap<QString, QString> map;
    QStringList pairs = QString(byteArray).split('&'); // 使用 '&' 分隔
    for (const QString& pair : pairs) {
        QStringList keyValue = pair.split('=');
        if (keyValue.size() == 2) {
            map.insert(keyValue[0], keyValue[1]);
        }
    }
    return map;
}

//QMap数组转化成 QByteArray
QByteArray convertQMapArrayToByteArrayCustom(const QList<QMap<QString, QString> > &mapArray)
{
    QByteArray byteArray;

    for (const QMap<QString, QString>& map : mapArray) {
        QList<QByteArray> mapPairs;

        for (auto it = map.constBegin(); it != map.constEnd(); ++it) {
            mapPairs.append(it.key().toUtf8() + "=" + it.value().toUtf8());
        }

        byteArray.append(mapPairs.join("&"));  // 使用 "&" 分隔键值对
        byteArray.append(";");  // 使用 ";" 分隔每个 QMap
    }
    return byteArray;

}

//将QByteArray转化为QMap数组
QList<QMap<QString, QString> > convertByteArrayToQMapArrayCustom(const QByteArray &byteArray)
{
    QList<QMap<QString, QString >> mapArray;

    // 使用 ";" 分割每个 QMap 的数据
    QList<QByteArray> mapStrings = byteArray.split(';');
    for (const QByteArray& mapString : mapStrings) {
        if (mapString.isEmpty()) {
            continue;    // 跳过空字符串
        }

        QMap<QString, QString> map;
        // 使用 "&" 分割每个键值对
        QList<QByteArray> pairs = mapString.split('&');
        for (const QByteArray& pair : pairs) {
            QList<QByteArray> keyValue = pair.split('=');
            if (keyValue.size() == 2) {
                map.insert(QString::fromUtf8(keyValue[0]), QString::fromUtf8(keyValue[1]));
            }
        }
        mapArray.append(map);
    }

    return mapArray;
}
